﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using produccion.vistamodelo;
using System.ComponentModel;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMmanempr.xaml
    /// </summary>
    public partial class FRMmanempr : Window
    {
        manempr _manempr;

        public FRMmanempr()
        {
            InitializeComponent();
            _manempr = (manempr)this.DataContext;
            
        }
   
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            _manempr.listaEmpresa();
            limpiar();
            if (_manempr.lisFilEmp.Count > 0)
            {
                dataGrid1.SelectedIndex = 0;
            }

            texNIT_CFG.Focus();
            texNIT_CFG.Select(0, 0);
        }

        private void limpiar() {
                texNIT_CFG.Text = "";
                texRAZSOC_CFG.Text ="";
                texNOMCOM_CFG.Text ="";      
                texDIRCOM_CFG.Text ="";
                texTELCOM_CFG.Text ="";
                texFAXCOM_CFG.Text = "";
                texEMAIL_CFG.Text = "";
                texRUTA_CFG.Text ="";
                texLOGO_CFG.Text ="";
                texCODIAC_CFG.Text ="";
                texDCTEMP_CFG.Text ="";
                texRUTPLA_CFG.Text ="";
                texSITWEB_CFG.Text ="";
                texCODCIU_CFG.SelectedValue = "";
            _manempr.txtEmpre.CAMBIO = false;
        }

        string camb;
        private void texNIT_CFG_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (_manempr.txtEmpre .NIT_CFG!= camb)
            {
                if (_manempr.txtEmpre .CAMBIO)
                {
                    if (MessageBox.Show("¿Está seguro que desea cambiar de elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                    {
                        _manempr.txtEmpre .NIT_CFG = camb;
                        return;
                    }
                    _manempr.txtEmpre .CAMBIO = false;
                }
                camb = _manempr.txtEmpre .NIT_CFG;
                _manempr.txtEmpre .consultar();
                if (!_manempr.txtEmpre .EXISTE)
                {
                    texRAZSOC_CFG.Text = "";
                    texNOMCOM_CFG.Text = "";
                    texDIRCOM_CFG.Text = "";
                    texTELCOM_CFG.Text = "";
                    texFAXCOM_CFG.Text = "";
                    texEMAIL_CFG.Text = "";
                    texRUTA_CFG.Text = "";
                    texLOGO_CFG.Text = "";
                    texCODIAC_CFG.Text = "";
                    texDCTEMP_CFG.Text = "";
                    texRUTPLA_CFG.Text = "";
                    texSITWEB_CFG.Text = "";
                    texCODCIU_CFG.SelectedValue = "";
                    _manempr.txtEmpre .CAMBIO = false;
                }
            }
        }

        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (_manempr.txtEmpre .CAMBIO)
            {
                if (MessageBox.Show("¿Está seguro que desea salir? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)
                {
                    e.Cancel = true;
                }
                else
                {
                    _manempr.txtEmpre.CAMBIO = false;
                }
            }
        }

        private void butNue_Click(object sender, RoutedEventArgs e)
        {
            if (_manempr.txtEmpre .CAMBIO)
            {
                if (MessageBox.Show("¿Está seguro que desea crear un nuevo elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                {
                    return;
                }
                _manempr.txtEmpre .CAMBIO = false;
            }
            limpiar();
            texNIT_CFG.Focus();
            texNIT_CFG.Select(0, 0);
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
              this.Close();
        }
        
        private void butEli_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("¿Esta seguro que desea eliminar el elemento?", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel) {
                return;
            }
            _manempr.eliminar(wPnot);
            limpiar();

            texNIT_CFG.Focus();
            texNIT_CFG.Select(0, 0);
        }

        private void butGua_Click(object sender, RoutedEventArgs e)
        {
            _manempr.guardar(wPnot);

            texNIT_CFG.Focus();
            texNIT_CFG.Select(0, 0);
        }

        private void cm_Closed(object sender, RoutedEventArgs e)
        {
            _manempr.filtrar();
        }

        private void quiFil_Click(object sender, RoutedEventArgs e)
        {
            _manempr.quiFil();
        }

        private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
                if (_manempr.txtEmpre .CAMBIO)
                {
                    if (MessageBox.Show("¿Está seguro que desea cambiar de elemento? se perderán los cambios no guardados.", "Confirmar", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.Cancel)//RRR
                    {
                       return;
                    }
                    _manempr.txtEmpre .CAMBIO = false;
                }
                if (_manempr.selEmpre != null)
                {
                    _manempr.txtEmpre .NIT_CFG= _manempr.selEmpre.NIT_CFG;
                    _manempr.txtEmpre .EXISTE = true;
                }
        }

        private void butExaFot_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog();
            dialog.SelectedPath =texRUTA_CFG.Text.Trim();
            dialog.ShowDialog();
            texRUTA_CFG.Text = dialog.SelectedPath;
        }

        private void butExaPla_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.FolderBrowserDialog dialog = new System.Windows.Forms.FolderBrowserDialog();
            dialog.SelectedPath = texRUTPLA_CFG.Text.Trim();
            dialog.ShowDialog();
            texRUTPLA_CFG.Text = dialog.SelectedPath;
        }

        private void butExaLog_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.Filter = "Image File|*.jpg";
            dlg.FileName = texLOGO_CFG.Text.Trim();
            Nullable<bool> result = dlg.ShowDialog(this);
            if (result == true)
            {
                texLOGO_CFG.Text = dlg.FileName;
            }
        }

        private void butConEmp_Click(object sender, RoutedEventArgs e)
        {
            _manempr.consEmp();

            texNIT_CFG.Focus();
            texNIT_CFG.Select(0, 0);
        }

        private void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }
    }

    internal class manempr:ObservableObject 
    {

        #region propiedades

        //-------------------------------------------------------------
        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }
        
        private VMbuscarGeneral _buscarEmpresa;
        public VMbuscarGeneral buscarEmpresa
        {
            get { return _buscarEmpresa; }
            set { _buscarEmpresa = value; RaisePropertyChangedEvent("bucarEmpresa"); }
        }

        private clases.CLSCFGEMPP _txtEmpre  = new clases.CLSCFGEMPP();
        public clases.CLSCFGEMPP txtEmpre {
            get { return _txtEmpre ; } 
            set {
              _txtEmpre  = value;
            RaisePropertyChangedEvent("txtEmpre");
            }
        }

        private clases.CLSCFGEMPP _filEmpre = new clases.CLSCFGEMPP
        {   NIT_CFG = "",
            RAZSOC_CFG = "",
            NOMCOM_CFG = "",
            DIRCOM_CFG = "",
            TELCOM_CFG = "",
            FAXCOM_CFG = "",
            EMAIL_CFG = "",
            RUTA_CFG = "",
            LOGO_CFG = "",
            CODIAC_CFG = "",
            DCTEMP_CFG = "",
            RUTPLA_CFG = "",
            SITWEB_CFG = "",
            CODCIU_CFG = "",
        };
        public clases.CLSCFGEMPP filEmpre
        {
            get { return _filEmpre; }
            set
            {
                _filEmpre = value;
                RaisePropertyChangedEvent("filEmpre");
            }
        }

        private clases.CLSCFGEMPP _selEmpre = new clases.CLSCFGEMPP();
        public clases.CLSCFGEMPP selEmpre
        {
            get { return _selEmpre; }
            set
            {
                _selEmpre = value;
                RaisePropertyChangedEvent("selEmpre");
             
            }
        }

        private List<clases.CLSMAECIUP> _lisBaseCiu = new clases.CLSMAECIUP().listarBaseCiu();
        public List<clases.CLSMAECIUP> lisBaseCiu
        {
            get { return _lisBaseCiu; }
            set
            {
                _lisBaseCiu = value;
                RaisePropertyChangedEvent("lisBaseCiu");
            }
        }

        private List<clases.CLSCFGEMPP> _lisEmpre = new List<clases.CLSCFGEMPP>();
        public List<clases.CLSCFGEMPP> lisEmpre
        {
            get { return _lisEmpre; }
            set
            {
                _lisEmpre = value;
                RaisePropertyChangedEvent("lisEmpre");
            }
        }

        private List<clases.CLSCFGEMPP> _lisFilEmp = new List<clases.CLSCFGEMPP>();
        public List<clases.CLSCFGEMPP> lisFilEmp
        {
            get { return _lisFilEmp; }
            set
            {
                _lisFilEmp = value;
                RaisePropertyChangedEvent("lisFilEmp");
            }
        }

        #endregion

        #region metodos
        
        //-----------------------------------------------
        public manempr()
        {
            cargar_empresas();

            MDOgeneral.conectar();
            strTituloVentana = "Mantenimiento de empresas - Usuario: " + MDOgeneral.usuario + " - [FRMmanempr]";
        }

        void onBuscarEmpresaPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "IsOpen")
                {
                    if (!buscarEmpresa.IsOpen)
                    {
                        if (buscarEmpresa.gridBuscar.selLista != null)
                        {
                            txtEmpre.NIT_CFG = buscarEmpresa.gridBuscar.selLista.strColumna1;
                        }
                    }
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private void cargar_empresas()
        {
            try
            {
                List<clases.CLSCFGEMPP> lisempresas = new clases.CLSCFGEMPP().listaEmpresa();
                _buscarEmpresa = new VMbuscarGeneral((from emp in lisempresas
                    select new VMlistaGenerica { strColumna1 = emp.NIT_CFG, strColumna2 = emp.NOMCOM_CFG, strColumna3 = emp.RAZSOC_CFG }).ToList());
                buscarEmpresa.PropertyChanged += onBuscarEmpresaPropertyChanged;
                buscarEmpresa.gridBuscar.columna1.strNombre = "Nit        ";
                buscarEmpresa.gridBuscar.columna2.strNombre = "Nombre Comercial";
                buscarEmpresa.gridBuscar.columna3.strNombre = "Razón Social";
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        RelayCommand _cmdBuscarEmpresa;
        public ICommand cmdBuscarEmpresa
        {
            get
            {
                if (_cmdBuscarEmpresa == null)
                {
                    _cmdBuscarEmpresa = new RelayCommand(r => buscarEmpresas()); 
                }
                return _cmdBuscarEmpresa;
            }
        }

        private void buscarEmpresas()
        {
            try
            {
                buscarEmpresa.IsOpen = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void listaEmpresa()
        {
            try
            {
                lisEmpre = selEmpre.listaEmpresa();
                lisFilEmp = lisEmpre;
            }
            catch (Exception ex) {MessageBox.Show(ex.Message);}
        }
        
        public void guardar(WrapPanel wPnot)
        {
            try
            {

                if (txtEmpre .EXISTE)
                {
                    if (txtEmpre .actualizar() > 0)
                    {
                        txtEmpre .CAMBIO = false;
                        lisEmpre.Clear();
                        lisEmpre = txtEmpre .listaEmpresa();
                        filtrar();
                        new MDOgeneral.notificar(wPnot, "Los cambios fueron guardados satisfactoriamente.", true);
                    }
                    else
                    {
                        new MDOgeneral.notificar(wPnot, "Los cambios no pueden ser guardados.", false);
                    }
                }
                else
                {
                    if (txtEmpre .insertar() > 0)
                    {
                        txtEmpre .CAMBIO = false;
                        txtEmpre .EXISTE = true;
                        lisEmpre.Clear();
                        lisEmpre = txtEmpre .listaEmpresa();
                        filtrar();                       
                        new MDOgeneral.notificar(wPnot, "El elemento fue creado satisfactoriamente.", true);
                    }
                    else
                    {
                        new MDOgeneral.notificar(wPnot, "El elemento no puede ser creado.", false);
                    }
                }

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        
        public void eliminar(WrapPanel wPnot)
        {
            try
            {
                if (txtEmpre .eliminar() > 0)
                {
                    txtEmpre .CAMBIO = false;
                    lisEmpre.Clear();
                    lisEmpre = txtEmpre .listaEmpresa();
                    filtrar();
                    new MDOgeneral.notificar(wPnot, "El elemento ha sido eliminado satisfactoriamente.", true);
                }
                else
                {
                    new MDOgeneral.notificar(wPnot, "El elemento no puede ser eliminado.", false);
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }     
        }

        public void filtrar() {
            lisFilEmp = lisEmpre.FindAll(r =>  r.NIT_CFG.ToUpper().Contains(filEmpre.NIT_CFG.ToUpper()) &
                r.RAZSOC_CFG.ToUpper().Contains(filEmpre.RAZSOC_CFG.ToUpper()) &
                r.NOMCOM_CFG.ToUpper().Contains(filEmpre.NOMCOM_CFG.ToUpper()) &
                r.DIRCOM_CFG.ToUpper().Contains(filEmpre.DIRCOM_CFG.ToUpper()) &
                r.TELCOM_CFG.ToUpper().Contains(filEmpre.TELCOM_CFG.ToUpper()) &
                r.FAXCOM_CFG.ToUpper().Contains(filEmpre.FAXCOM_CFG.ToUpper()) &
                r.EMAIL_CFG.ToUpper().Contains(filEmpre.EMAIL_CFG.ToUpper()) &
                r.RUTA_CFG.ToUpper().Contains(filEmpre.RUTA_CFG.ToUpper()) &
                r.LOGO_CFG.ToUpper().Contains(filEmpre.LOGO_CFG.ToUpper()) &
                r.CODIAC_CFG.ToUpper().Contains(filEmpre.CODIAC_CFG.ToUpper()) &
                r.DCTEMP_CFG.ToUpper().Contains(filEmpre.DCTEMP_CFG.ToUpper()) &
                r.RUTPLA_CFG.ToUpper().Contains(filEmpre.RUTPLA_CFG.ToUpper()) &
                r.SITWEB_CFG.ToUpper().Contains(filEmpre.SITWEB_CFG.ToUpper()) &
                r.CODCIU_CFG.ToUpper().Contains(filEmpre.CODCIU_CFG.ToUpper()));
            lisFilEmp.Add(new clases.CLSCFGEMPP
            {   NIT_CFG = "",
                RAZSOC_CFG = "",
                NOMCOM_CFG = "",
                DIRCOM_CFG = "",
                TELCOM_CFG = "",
                FAXCOM_CFG = "",
                EMAIL_CFG = "",
                RUTA_CFG = "",
                LOGO_CFG = "",
                CODIAC_CFG = "",
                DCTEMP_CFG = "",
                RUTPLA_CFG = "",
                SITWEB_CFG = "",
                CODCIU_CFG = "",
            });
        }

        public void quiFil()
        {
            filEmpre = new clases.CLSCFGEMPP
            {
                NIT_CFG = "",
                RAZSOC_CFG = "",
                NOMCOM_CFG = "",
                DIRCOM_CFG = "",
                TELCOM_CFG = "",
                FAXCOM_CFG = "",
                EMAIL_CFG = "",
                RUTA_CFG = "",
                LOGO_CFG = "",
                CODIAC_CFG = "",
                DCTEMP_CFG = "",
                RUTPLA_CFG = "",
                SITWEB_CFG = "",
                CODCIU_CFG = "",
            };
            lisFilEmp = lisEmpre.FindAll(r => r.NIT_CFG.ToUpper().Contains(filEmpre.NIT_CFG.ToUpper()) &
                r.RAZSOC_CFG.ToUpper().Contains(filEmpre.RAZSOC_CFG.ToUpper()) &
                r.NOMCOM_CFG.ToUpper().Contains(filEmpre.NOMCOM_CFG.ToUpper()) &
                r.DIRCOM_CFG.ToUpper().Contains(filEmpre.DIRCOM_CFG.ToUpper()) &
                r.TELCOM_CFG.ToUpper().Contains(filEmpre.TELCOM_CFG.ToUpper()) &
                r.FAXCOM_CFG.ToUpper().Contains(filEmpre.FAXCOM_CFG.ToUpper()) &
                r.EMAIL_CFG.ToUpper().Contains(filEmpre.EMAIL_CFG.ToUpper()) &
                r.RUTA_CFG.ToUpper().Contains(filEmpre.RUTA_CFG.ToUpper()) &
                r.LOGO_CFG.ToUpper().Contains(filEmpre.LOGO_CFG.ToUpper()) &
                r.CODIAC_CFG.ToUpper().Contains(filEmpre.CODIAC_CFG.ToUpper()) &
                r.DCTEMP_CFG.ToUpper().Contains(filEmpre.DCTEMP_CFG.ToUpper()) &
                r.RUTPLA_CFG.ToUpper().Contains(filEmpre.RUTPLA_CFG.ToUpper()) &
                r.SITWEB_CFG.ToUpper().Contains(filEmpre.SITWEB_CFG.ToUpper()) &
                r.CODCIU_CFG.ToUpper().Contains(filEmpre.CODCIU_CFG.ToUpper()));
        }
        
        #endregion

        public void consEmp() 
        {
            try 
            {

                clases.CLSCFGEMPP datos = new clases.CLSCFGEMPP();
                FRMbuscar frm = new FRMbuscar(datos, "buscar", "Nombre_empresa", "NOMCOM_CFG", "Nit");
                frm.ShowDialog();
                txtEmpre.NIT_CFG = frm.retorno;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        
        }

    }
}
